package com.husd.leetcode.recursion;

/**
 * 面试题 08.05. 递归乘法
 * <p>
 * 递归乘法。 写一个递归函数，不使用 * 运算符， 实现两个正整数的相乘。可以使用加号、减号、位移，但要吝啬一些。
 * <p>
 * 示例1:
 * <p>
 * 输入：A = 1, B = 10
 * 输出：10
 * 示例2:
 * <p>
 * 输入：A = 3, B = 4
 * 输出：12
 * 提示:
 * <p>
 * 保证乘法范围不会溢出
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/recursive-mulitply-lcci
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 *
 * @author hushengdong
 */
public class RecursionMultiply {

    // 这个是递归
    // 如果A比较大 A * B = A * (B-1) + A
    // 如果B比较大 A * B = B * (A-1) + B
    public int multiply(int A, int B) {

        if (A == 0 || B == 0) return 0;
        if (A == 1) {
            return B;
        }
        if (B == 1) {
            return A;
        }
        if (A > B) {
            return A + multiply(A, B - 1);
        } else {
            return B + multiply(B, A - 1);
        }
    }
}
